package backpage.control;

import java.io.File;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import com.model.User;
import backpage.model.UploadHandler;

public class onUpload extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 2411119859422920965L;

	/**
	 * Constructor of the object.
	 */
	public onUpload() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	@SuppressWarnings("deprecation")
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		User user = (User) request.getSession().getAttribute("userInfo");
		if (user == null || !user.getState().equals("teacher")){
			response.sendRedirect("backPage/jsp/login.jsp");
			return;
		}

		String resType = request.getParameter("resType");
		if( resType == null ) resType = "doc";
		
		//get description from the temp text input control
		String description = request.getParameter("hiddenDescrip");
		if( description == null ) description = "";
		
		if( request instanceof MultiPartRequestWrapper ){			
		  //copy the temp file to the location designated
			File[] files = ((MultiPartRequestWrapper) request).getFiles("file");
			String[] fileNames = ((MultiPartRequestWrapper) request).getFileNames("file");
			
			if( files != null && fileNames != null && files.length > 0 && fileNames.length > 0){
				request.setAttribute("status",	//return the upload status to the upload.jsp
						UploadHandler.instance.Upload( resType,
								request.getRealPath("/upload")+"/", 
								fileNames[0], files[0], description));
			}
			else request.setAttribute("status", UploadHandler.ERROR_LARGE); //It must be a file larger than expected, or no file submitted
		}
		
		else if( !ServletFileUpload.isMultipartContent(request) ){	//The user directly requests this servlet, which was not allowed
			response.sendRedirect("backPage/jsp/upload.jsp?resType="+resType);
			return;
		}

		RequestDispatcher rDispatcher = request.getRequestDispatcher("backPage/jsp/upload.jsp?resType="+resType);
		if( rDispatcher !=null ){
			request.setAttribute("description", description); //send the description back to the upload page
			rDispatcher.forward(request, response);
			return;
		}
	}

		
		
	

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		
	}

}
